package com.seed.codegenerator.generator.enums;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author gchiaway
 * 日期: 2021-03-24
 * 时间: 11:38
 */
public enum CodeGeneratorEnum {
    /**
     * 单表
     */
    EMPTY(1, "empty", "/generator", "empty", "经典风格"),
    /**
     * 单表
     */
    ONE(1, "one", "/generator", "one", "经典风格"),
    /**
     * 多表
     */
    MANY(2, "many", "/generator", "onetomany", "经典风格"),
    /**
     * 弹窗风格
     */
    POPUP(3, "popup", "/generator", "popup", "经典风格"),
    /**
     * 左右结构
     */
    LEFTRIGHT(4, "leftright", "/generator", "leftright", "经典风格"),
    /**
     * 左右结构字典
     */
    LEFT_RIGHT_DICTIONARY(4, "LEFT_RIGHT_DICTIONARY", "/generator", "leftrightdictionary", "经典风格"),
    ;

    /**
     * 类型 1/单表 2/一对多 3/树
     */
    int type;
    /**
     * 编码标识
     */
    String code;
    /**
     * 代码生成器模板路径
     */
    String templatePath;
    /**
     * 代码生成器模板路径
     */
    String stylePath;
    /**
     * 模板风格名称
     */
    String note;

    /**
     * 构造器
     *
     * @param type         类型 1/单表 2/一对多 3/树
     * @param code         模板编码
     * @param templatePath 模板路径
     * @param stylePath    模板子路径
     * @param note
     */
    CodeGeneratorEnum(int type, String code, String templatePath, String stylePath, String note) {
        this.type = type;
        this.code = code;
        this.templatePath = templatePath;
        this.stylePath = stylePath;
        this.note = note;
    }

    /**
     * 根据code获取模板路径
     *
     * @param code
     * @return
     */
    public static String getTemplatePathByConfig(String code) {
        return getCodeGeneratorEnumByConfig(code).templatePath;
    }

    /**
     * 根据code找枚举
     *
     * @param code
     * @return
     */
    public static CodeGeneratorEnum getCodeGeneratorEnumByConfig(String code) {
        for (CodeGeneratorEnum e : CodeGeneratorEnum.values()) {
            if (e.code.equals(code)) {
                return e;
            }
        }
        return null;
    }

    /**
     * 根据类型找所有
     *
     * @param type
     * @return
     */
    public static List<Map<String, Object>> getJspModelList(int type) {
        List<Map<String, Object>> ls = new ArrayList<Map<String, Object>>();
        for (CodeGeneratorEnum e : CodeGeneratorEnum.values()) {
            if (e.type == type) {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("code", e.code);
                map.put("note", e.note);
                ls.add(map);
            }
        }
        return ls;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public String getTemplatePath() {
        return templatePath;
    }

    public void setTemplatePath(String templatePath) {
        this.templatePath = templatePath;
    }

    public String getStylePath() {
        return stylePath;
    }

    public void setStylePath(String stylePath) {
        this.stylePath = stylePath;
    }
}
